package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.product.entity.BaseAttrValue;
import com.atguigu.gmall.product.service.BaseAttrValueService;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.gmall.product.entity.BaseAttrInfo;
import com.atguigu.gmall.product.service.BaseAttrInfoService;
import com.atguigu.gmall.product.mapper.BaseAttrInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author DELL
 * @description 针对表【base_attr_info(属性表)】的数据库操作Service实现
 * @createDate 2022-11-29 22:54:35
 */
@Service
public class BaseAttrInfoServiceImpl extends ServiceImpl<BaseAttrInfoMapper, BaseAttrInfo>
        implements BaseAttrInfoService {
    /**
     * 调用baseMap 去查询 平台属性
     *
     * @param category1Id
     * @param category2Id
     * @param category3Id
     * @return
     */
    @Override
    public List<BaseAttrInfo> getBaseAttrValue(Long category1Id, Long category2Id, Long category3Id) {
        return baseMapper.getBaseAttrValue(category1Id, category2Id, category3Id);

    }

    /**
     * @param baseAttrInfo  保存平台属性
     */
    @Autowired
    private BaseAttrValueService baseAttrValueService;

    @Override
    public void saveAttrInfo(BaseAttrInfo baseAttrInfo) {
        // 1 TODO 把属性名信息 保存到 base_attr_info中
        boolean save = save(baseAttrInfo);
        //存储成功以后 会给你返回一个自增 id
        //TODO 保存上一步操作成功的自增id
        Long attr = baseAttrInfo.getId();
        //2 TODO 把属性值的信息 保存到 base_attr_value中
        List<BaseAttrValue> attrValueList = baseAttrInfo.getAttrValueList();//拿到所有的属性值
        //TODO 回填属性id
        for (BaseAttrValue attrValue : attrValueList) {
            attrValue.setAttrId(attr);
        }
        baseAttrValueService.saveBatch(attrValueList); //保存进 baseAttrValue实体类中

    }

    /**
     * 根据 BaseAttrInfo表中id 去修改
     *
     * @param baseAttrInfo
     */

    @Override
    public void updateByAttrId(BaseAttrInfo baseAttrInfo) {
        //1 TODO 修改  base_attr_info中的属性
        updateById(baseAttrInfo);
        //TODO 删除的关键在于 前端提交的集合与数据库中的集合做比较  少的一些数据  就是要删除的
        //delete * from base_attr_value where attr_id=11 and id not in(59,60)
        List<Long> idList = new ArrayList<>();
        for (BaseAttrValue baseAttrValue : baseAttrInfo.getAttrValueList()) {
            if (baseAttrValue.getId() != null) {
                idList.add(baseAttrValue.getId());
            }
        }
//                baseAttrValueService
//                        .lambdaUpdate()
//                        .eq(BaseAttrValue::getAttrId, baseAttrInfo.getId())
//                        .notIn(BaseAttrValue::getId, idList)
//                        .remove();
        if(idList.size()>0){
            baseAttrValueService
                      .lambdaUpdate()
                      .eq(BaseAttrValue::getAttrId, baseAttrInfo.getId())
                       .notIn(BaseAttrValue::getId, idList)
                       .remove();
        }else{
            baseAttrValueService.lambdaUpdate()
                    .eq(BaseAttrValue::getAttrId, baseAttrInfo.getId())
                    .remove();
        }
        //TODO 删除前端没提交的 id 集合  这个写法不让用
     //   baseAttrValueService.remove(wrapper);

        List<BaseAttrValue> attrValueList = baseAttrInfo.getAttrValueList();
        //TODO 遍历attrValuelist中的属性
        for (BaseAttrValue baseAttrValue : attrValueList) {
            //TODO  前端没有提交id的都是是新增
            if (baseAttrValue.getId() == null) {
                //TODO 新增的时候  要回填 atrrId
                baseAttrValue.setAttrId(baseAttrInfo.getId());
                baseAttrValueService.save(baseAttrValue);
            } else {
                //2 TODO 修改  base_attr_value中的属性 ， 前端提交id的是修改
                baseAttrValueService.updateById(baseAttrValue);
            }
        }


    }

}




